home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byt87ibm.arc / SAGAN.ARC / MDRIVER.ASM next >
Assembly Source File  |  1987-06-17  |  4KB  |  210 lines

  1. ; ====================== CODE SEGMENT DEFN ======================= 
  2. CSEG    segment public para 'code' 
  3. ; Set to MICROSOFT = 0 to make mousesys  sample program 
  4. ; Set to MICROSOFT = 1 to make microsoft sample program 
  5. ;  
  6. MICROSOFT    = 0
  7.     ORG    0 
  8. ZERO    LABEL    WORD 
  9.     ORG    100h        ; For sample program only 
  10.     ASSUME CS:CSEG, DS:CSEG, ES:NOTHING, SS:NOTHING 
  11. START: 
  12.     JMP    SAMPLECODE 
  13. ; These are the available functions: 
  14. ;     function 0 = initialize mouse 
  15. ;     function 1 = return button status 
  16. ;     function 2 = return relative motion 
  17. ;     function 3 = de-initialize mouse 
  18. ;     function 4 = return current serial port 
  19.     IF MICROSOFT 
  20.     INCLUDE MICROSOF.ASM 
  21.     ELSE 
  22.     INCLUDE MOUSESYS.ASM 
  23.     ENDIF 
  24. VIDEO    =    10H 
  25. MAXX    DW    80 
  26. MAXY    DW    22 
  27. MYX    DW    0 
  28. MYY    DW    0 
  29. MBSTAT    DB    0FFH 
  30. CVM    DB    0 
  31. BUT1MES    DB    'Button one:  $' 
  32. BUT2MES    DB    'Button two:  $' 
  33. BUT3MES DB    'Button three:$' 
  34. PRESMES    DB    'pressed $' 
  35. RELMES    DB    'released$' 
  36. ERRMES    DB    'Mouse or Mouse software not installed$' 
  37. ERR_NODEVICE: 
  38.     MOV    DX,OFFSET ERRMES 
  39.     CALL    PRINT 
  40.     JMP    EXIT_ROUTINE 
  41. ;     
  42. SAMPLECODE: 
  43.     PUSH    CS 
  44.     POP    DS 
  45.     MOV    AH,0FH 
  46.     INT    VIDEO              ; Get current video mode 
  47.     MOV    CVM,AL            ; Save current video mode 
  48.     MOV    BYTE PTR MAXX,AH    ; store maximum cursor position 
  49.     SUB    AH,AH 
  50.     INT    VIDEO            ; Clear screen 
  51.     MOV    DH,BYTE PTR MAXY    ; Row 22, column 0 
  52.     SUB    DL,DL 
  53.     PUSH    DX 
  54.     CALL    SET_CURSOR 
  55.     MOV    DX,OFFSET BUT1MES 
  56.     CALL    PRINT 
  57.     POP    DX 
  58.     INC    DH 
  59.     PUSH    DX 
  60.     CALL    SET_CURSOR 
  61.     MOV    DX,OFFSET BUT2MES 
  62.     CALL    PRINT 
  63.     POP    DX 
  64.     INC    DH 
  65.     CALL    SET_CURSOR 
  66.     MOV    DX,OFFSET BUT3MES 
  67.     CALL    PRINT 
  68.     MOV    BX,4 
  69.     CALL    ENTRY        ; Serial port in Ax 
  70.     SUB    BX,BX 
  71.     CALL    ENTRY        ; Initialize mouse 
  72.     OR    AL,AL        ; If al = zero then an error occured
  73.     JZ    ERR_NODEVICE 
  74. SCLOOP: 
  75.     MOV    BX,2 
  76.     CALL    ENTRY 
  77.     MOV    CX,5        ; scale x coordinate 
  78.     CWD 
  79.     IDIV    CX 
  80.     ADD    AX,MYX        ; My x cursor position 
  81.     JNS    SCLOOP1 
  82.     MOV    AX,MAXX        ; wrap to right 
  83.     DEC    AX 
  84. SCLOOP1: 
  85.     CMP    AX,MAXX 
  86.     JNG    SCLOOP2 
  87.     SUB    AX,AX        ; Wrap to left 
  88. SCLOOP2: 
  89.     MOV    MYX,AX        ; Save new x 
  90.     MOV    AX,BX        ; get delta y  
  91.     CWD 
  92.     IDIV    CX 
  93.     ADD    AX,MYY        ; My y cursor position 
  94.     JNS    SCLOOP25 
  95.     MOV    AX,MAXY        ; Wrap to bottom of screen 
  96.     DEC    AX 
  97. SCLOOP25: 
  98.     CMP    AX,MAXY 
  99.     JNG    SCLOOP3 
  100.     SUB    AX,AX        ; Wrap to top 
  101. SCLOOP3: 
  102.     MOV    MYY,AX        ; Save new y 
  103.     MOV    BX,1 
  104.     CALL    ENTRY 
  105.     CMP    AL,MBSTAT 
  106.     JE    SCLOOP4 
  107.     MOV    MBSTAT,AL 
  108.     SHR    AX,1        ; put button 1 status in carry 
  109.     MOV    DH,BYTE PTR MAXY 
  110.     MOV    DL,15 
  111.     CALL    BUTTONPRINT 
  112.     SHR    AX,1 
  113.     INC    DH 
  114.     CALL    BUTTONPRINT 
  115.     SHR    AX,1 
  116.     INC    DH 
  117.     CALL    BUTTONPRINT 
  118. SCLOOP4: 
  119.     MOV    DL,BYTE PTR MYX 
  120.     MOV    DH,BYTE PTR MYY 
  121.     CALL    SET_CURSOR 
  122.     MOV    AH,1 
  123.     INT    16H        ; Keyboard input ? 
  124.     JZ    SCLOOP        ; No 
  125.     SUB    AH,AH 
  126.     INT    16H        ; Read key 
  127.     CMP    AL,27        ; <Esc> ? 
  128.     JZ    SCLOOP5 
  129.     MOV    AH,14 
  130.     INT    VIDEO 
  131.     MOV    AH,3 
  132.     SUB    BH,BH 
  133.     INT    VIDEO        ; Read cursor position 
  134.     MOV    BYTE PTR MYX,DL 
  135.     MOV    BYTE PTR MYY,DH 
  136.     JMP    SCLOOP 
  137. SCLOOP5: 
  138.     MOV    BX,3 
  139.     CALL    ENTRY        ; Clean up after mouse 
  140. EXIT_ROUTINE:     
  141.     MOV    AL,CVM 
  142.     SUB    AH,AH 
  143.     INT    VIDEO        ; Clear screen 
  144.     MOV    AX,04C00H     
  145.     INT    MSDOS        ; bye bye 
  146. SET_CURSOR: 
  147.     SUB    BH,BH 
  148.     MOV    AH,02 
  149.     INT    VIDEO        ; Set cursor position 
  150.     RET 
  151. BUTTONPRINT: 
  152.     PUSH    AX 
  153.     PUSH    DX 
  154.     PUSHF 
  155.     CALL    SET_CURSOR 
  156.     MOV    DX,OFFSET RELMES 
  157.     POPF 
  158.     JNC    BP2            ; Carry means button pressed 
  159.     MOV    DX,OFFSET PRESMES 
  160. BP2: 
  161.     CALL    PRINT 
  162.     POP    DX 
  163.     POP    AX 
  164.     RET 
  165. PRINT: 
  166.     PUSH    SI 
  167.     PUSH    BX 
  168.     MOV    SI,DX 
  169.     MOV    BX,3 
  170. PRIN1: 
  171.     LODSB 
  172.     CMP    AL,'$' 
  173.     JE    PRIN2 
  174.     MOV    AH,14 
  175.     INT    VIDEO        ; Teletype routine 
  176.     JMP    PRIN1 
  177. PRIN2: 
  178.     POP    BX 
  179.     POP    SI 
  180.     RET 
  181. CSEG    ENDS 
  182.     END    START
  183.